package com.gxc.linkedList;

/**
 * 2181. 合并零之间的节点

 * 给你一个链表的头节点 head ，
 * 该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。
 *
 * 对于每两个相邻的 0 ，请你将它们之间的所有节点合并成一个节点，
 * 其值是所有已合并节点的值之和。
 * 然后将所有 0 移除，修改后的链表不应该含有任何 0 。
 *
 *  返回修改后链表的头节点 head 。
 */
public class MergeNodes {

    public static void main(String[] args) {
        ListNode node1 = new ListNode(0);
        ListNode node2 = new ListNode(3);
        ListNode node3 = new ListNode(1);
        ListNode node4 = new ListNode(0);
        ListNode node5 = new ListNode(4);
        ListNode node6 = new ListNode(5);
        ListNode node7 = new ListNode(2);
        ListNode node8 = new ListNode(0);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;
        node7.next = node8;

        ListNode node = handle(node1);
        System.out.println("====");
    }

    public static ListNode handle(ListNode head) {
        ListNode prev = new ListNode(0);
        ListNode newHead = prev;
        while (head!=null) {
            int sum = 0;
            while (head.val != 0) {
                sum+=head.val;
                head = head.next;
            }
            if (sum != 0) {
                ListNode node = new ListNode(sum);
                prev.next = node;
                prev = node;
            }
            head = head.next;
        }
        return newHead.next;
    }

    class Solution {
        public ListNode mergeNodes(ListNode head) {
            ListNode dummy = new ListNode();
            ListNode tail = dummy;
            int total = 0;
            for (ListNode cur = head.next; cur != null; cur = cur.next) {
                if (cur.val == 0) {
                    ListNode node = new ListNode(total);
                    tail.next = node;
                    tail = tail.next;
                    total = 0;
                } else {
                    total += cur.val;
                }
            }

            return dummy.next;
        }
    }

    public static class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }

}
